#pragma once
#include <stdint.h>
#include <stdbool.h>
#include "hrd_bitmask_definiation.h"
#include "hrd_object_movement.h"


bool HrdBitmask_IsGoalAchieved(hrd_bitmask_t goal, hrd_bitmask_list_t hrd_bitmask_list);

hrd_bitmask_t HrdBitmask_GenerateNewObjectBitmask(hrd_bitmask_t hrd_object_bitmask, hrd_object_move_direction_et hrd_object_direction, uint8_t length);

bool HrdBitmask_CanUpdateObject(hrd_bitmask_list_t hrd_bitmask_list, uint8_t hrd_object_index, hrd_object_move_direction_et hrd_object_direction, uint8_t length);

void HrdBitmask_UpdateObject(hrd_bitmask_list_t hrd_bitmask_list, uint8_t hrd_object_index, hrd_object_move_direction_et hrd_object_direction, uint8_t length);

void HrdBitmask_InitMap(hrd_bitmask_list_t hrd_bitmask_list);

void HrdBitmask_InitBoundary(hrd_bitmask_list_t hrd_bitmask_list);

void HrdBitmask_SetBoundary(hrd_bitmask_list_t hrd_bitmask_list, hrd_bitmask_t boundary);

hrd_bitmask_t HrdBitmask_GetBoundary(hrd_bitmask_list_t hrd_bitmask_list);

bool HrdBitmask_IsGoalValid(hrd_bitmask_list_t hrd_bitmask_list, hrd_bitmask_t goal);

bool HrdBitmask_IsBitmaskListValid(hrd_bitmask_list_t hrd_bitmask_list);